/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 17655
 * Date: 2024-11-29
 * Time: 12:25
 */
public class test1 {
    /*
    NewCoder BM11 链表相加（二）

     */
    // 1.反转链表
    public ListNode reverse (ListNode head){
        ListNode node = null;
        ListNode cur = head;
        // 类似于交换两个数字
        // 让cur的下一个是node，然后node变成cur，cur又变成cur的下一个
        // 举例：
        // cur==1，node==null，next==2，
        // 先让cur的下一个变成null，然后node变成cur（1），cur变成next（2）
        // 所以就变成了2 ->1
        while(cur!=null){
            ListNode next=cur.next;
            cur.next=node;
            node=cur;
            cur=next;
        }
        return node;
    }


    public ListNode addInList (ListNode head1, ListNode head2) {
        head1=reverse(head1);
        head2=reverse(head2);
        // 2.高精度加法
        ListNode cur1 = head1;
        ListNode cur2 = head2;
        ListNode ret = new ListNode(0);
        int t=0;
        ListNode prev =ret;
        // 利用t进行计算进位
        while(cur1!=null||cur2!=null||t!=0){
            if(cur1!=null){
                t+=cur1.val;
                cur1=cur1.next;
            }
            if(cur2!=null){
                t+=cur2.val;
                cur2=cur2.next;
            }
            prev = prev.next=new ListNode(t%10);
            // 进位判断
            t/=10;
        }
        return reverse(ret.next);
    }

    public class ListNode {
        int val;
        ListNode next = null;
        public ListNode(int val) {
        this.val = val;
        }
    }
}
